iT邦幫忙

2021 iThome 鐵人賽

DAY 15
17
Software Development

奇怪的知識增加了!原來程式還可以這樣用?!系列 第 15

[Day15] 明天是女友的生日卻忘記準備禮物? 教你三秒做出愛心照片牆!

  • 分享至 

  • xImage
  •  

還記得以前幫朋友過生日的時候都會去印一堆照片做照片牆,
但光是印照片就有夠麻煩、貼照片排形狀又很浪費時間(女生就喜歡麻煩),
難道沒有又快又方便的方法嗎!!

有喔~今天要來教大家用程式三秒生成愛心相片牆~
就算當天才想起來女朋友生日也來得及跑去超商印出來當卡片喔!

使用環境

程式碼

from PIL import Image
import os
import math
import inquirer

heart = [ # 幫你們標好一顆愛心
    [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
    [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
    [1,1,1,1,1,0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1],
    [1,1,1,1,0,0,0,0,0,1,1,1,0,0,0,0,0,1,1,1,1],
    [1,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,1],
    [1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1],
    [1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1],
    [1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1],
    [1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1],
    [1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1],
    [1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1],
    [1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1],
    [1,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1],
    [1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1],
    [1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1],
    [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
    [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
]
double_heart = [ # 幫你們標好兩顆愛心
    [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
    [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1],
    [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1],
    [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1],
    [1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1],
    [1,1,1,1,1,0,0,0,0,0,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,1,1],
    [1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1],
    [1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1],
    [1,1,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1],
    [1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1],
    [1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1],
    [1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,0,0,1,1,1,1,1],
    [1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,1,0,0,1,1,1,1,1],
    [1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,0,0,1,0,1,1,1,1,1,1],
    [1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,0,0,0,0,0,1,1,1],
    [1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,0,0,0,0,0,0,1,1],
    [1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,0,0,1,1],
    [1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,0,1],
    [1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,0,1],
    [1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,1],
    [1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,1,1,1,1,1,1,1,1,1,0,0,1,1],
    [1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,1,1,1,1,1,1,0,0,1,1,1],
    [1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1],
    [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,1,1,1,1,1,1],
    [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1],
]

img_dir = r"C:\Users\lala_chen\Desktop\img" # 改成你存圖片的資料夾路徑
imgs = [file for file in os.listdir(img_dir) if file.endswith((".img", ".png", ".jpg"))] # 指定抓取的檔案格式
img_h = img_w = 300 # 設定圖片的長寬
icon_dict = {
    "heart": heart,
    "double_heart": double_heart,
}
questions = [ 
        inquirer.List('icon', message = "你要套用哪種圖案?", choices = icon_dict.keys()),
        ]
answers = inquirer.prompt(questions)
curr_icon = icon_dict[answers['icon']]

rows = len(curr_icon)
columns = len(curr_icon[0])

figure = Image.new("RGB", (img_w*columns, img_h*rows),"#FBEBEF") # 將圖片以外的背景設定成馬卡龍粉
count = 0
for i in range(len(curr_icon)):
    for j in range(len(curr_icon[i])):
        if curr_icon[i][j] == 1:
            continue
        else:
            try:
                image = Image.open(os.path.join(img_dir, imgs[count]))
            except:
                continue
            image = image.resize((img_w, img_h))
            figure.paste(image, (img_w*j, img_h*i))
            count += 1
figure.show()          
figure.save('國民女友_我堂姊.jpg') # 我堂姊超仙,可惜圖片太小了哭阿

成果發表會

  • 一顆愛心
    https://ithelp.ithome.com.tw/upload/images/20210913/20133286a2Nlw5bAqr.jpg

  • 心心相印

你們看是不是有夠浪漫!!還可以跟女朋友說這是你一張一張慢慢排的!
保證女朋友以為你準備了很久(其實才三秒...)

但是你們可能會想說,難道一定要自己標記0,1嗎?這樣不是很花時間嗎??
下一篇會教怎麼樣讓程式幫你標記0,1,就不用自己手動標記了喔!


上一篇
[Day14] 家裡WiFi被媽媽鎖了怎麼辦? 教你用Python破解WiFi密碼 !
下一篇
[Day16] 再也不用靠線上工具! 用Python把圖片轉成ASCII文字圖!
系列文
奇怪的知識增加了!原來程式還可以這樣用?!31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
3
dscwferp
iT邦高手 1 級 ‧ 2021-09-15 12:04:14

這篇遲到了30幾年
我的初戀.....
嗚~~~~

lulu_meat iT邦研究生 5 級 ‧ 2021-09-16 11:34:24 檢舉

<

2
gior__ann
iT邦新手 2 級 ‧ 2021-09-15 13:28:09

還好我單身~ 不用這麼搞剛 XDD

lulu_meat iT邦研究生 5 級 ‧ 2021-09-16 11:34:12 檢舉

先學起來 女朋友手到擒來!

1
1984105
iT邦新手 4 級 ‧ 2021-09-15 15:07:53

如果照片邊角太銳利,加個柔邊會不會更浪漫~

lulu_meat iT邦研究生 5 級 ‧ 2021-09-16 10:19:42 檢舉

我還再想要怎麼只把最外面的邊加柔邊XD

1
jiatool
iT邦研究生 2 級 ‧ 2021-09-16 09:28:07

我還是第一次知道可以這樣做!!

假寫教學,真曬照片 (誤XD

lulu_meat iT邦研究生 5 級 ‧ 2021-09-16 10:24:12 檢舉

偷偷告訴您 明天還會再曬一次喔><

lulu_meat iT邦研究生 5 級 ‧ 2021-09-16 11:34:45 檢舉

啊不對 是後天

jiatool iT邦研究生 2 級 ‧ 2021-09-17 08:57:52 檢舉

期待囉~ (?

0
mariio
iT邦新手 5 級 ‧ 2022-02-12 17:32:53

想問一下,answers 和 questions 是做甚麼功用的? 感謝!!

我要留言

立即登入留言